/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦，本文采用木兰宽松许可证第2版]
 * 
 * https://zhiqim.org/project/zhiqim_kit/zhiqim_git.htm
 *
 * ZhiqimGit is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.git.refer;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


/**
 * 引用比较器，比较两个引用或引用名
 *
 * @version v1.0.0 @author zouzhigang 2017-3-23 新建与整理
 */
public class RefComparator implements Comparator<Ref>
{
    private static final RefComparator instance = new RefComparator();
    
    public static RefComparator getInstance()
    {
        return instance;
    }

    public int compare(Ref o1, Ref o2)
    {
        return compareTo(o1, o2);
    }

    /**
     * 根据引用名称排序
     * 
     * @param refs  引用列表
     * @return      排序后的引用列表
     */
    public static List<Ref> sort(List<Ref> refs)
    {
        Collections.sort(refs, instance);
        return refs;
    }
    
    /**
     * 根据引用名称排序
     * 
     * @param refs  引用列表
     * @return      排序后的引用列表
     */
    public static List<Ref> sort(Collection<Ref> refs)
    {
        final List<Ref> r = new ArrayList<Ref>(refs);
        Collections.sort(r, instance);
        return r;
    }

    /**
     * 引用和另一个引用的名称比较
     * 
     * @param o1    第一引用
     * @param o2    第二引用
     * @return      字符串比较得到值
     */
    public static int compareTo(Ref o1, String o2)
    {
        return o1.getName().compareTo(o2);
    }
    
    /**
     * 两个引用比较
     * 
     * @param o1    第一引用
     * @param o2    第二引用
     * @return      字符串比较得到值
     */
    public static int compareTo(Ref o1, Ref o2)
    {
        return o1.getName().compareTo(o2.getName());
    }
}
